#ifndef NODOHUFFMAN_H_
#define NODOHUFFMAN_H_

template<class T> class NodoHuffman {
private:
    NodoHuffman<T>* izq;
    NodoHuffman<T>* der;
    int frec_total;
    T valor;

public:
    NodoHuffman(){
        izq = 0;
        der = 0;
    }

    NodoHuffman(T val) {
        izq=0;
        der=0;
        frec_total = 1;
        valor = val;
    }

    NodoHuffman(int frec, T val) {
        izq = 0;
        der = 0;
        frec_total = frec;
        valor = val;
    }

    NodoHuffman(const NodoHuffman<T>*& nodo) {
        izq = nodo->getIzq();
        der = nodo->getDer();
        frec_total = nodo->getFrecuencia();
        T valor = nodo->getValor();
    }

    virtual ~NodoHuffman() {
    }

    void borrarHijos() {
        if (izq)
            izq->borrarHijos();
        if (der)
            der->borrarHijos();
        delete izq;
        delete der;
    }

    T getValor() {
        return valor;
    }

    int getFrecuencia() const{
        return frec_total;
    }

    NodoHuffman<T> *& getIzq(){
		return izq;
	}

	NodoHuffman<T> *& getDer(){
		return der;
	}

    void setDer(NodoHuffman<T>*& nodo) {
        der=nodo;
    }

    void setIzq(NodoHuffman<T>*& nodo) {
        izq=nodo;
    }

    void setFrecuencia(int fre) {
        frec_total = fre;
    }

    bool esHoja() {
        return (izq==0 && der==0);
    }

	bool operator<(const NodoHuffman<T>& otroNodo) const {
        return (frec_total < otroNodo.getFrecuencia() );
	}



};


#endif // NODOHUFFMAN_H_
